﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Collections;
using System.IO;

namespace PPE_gestion_commercial
{
    public partial class HistoriqueCommandes : Form
    {
        private string strconn = "server=78.241.116.47;Network Library=DBMSSOCN; database=gestion; User Id=Gestion; Password=gestion";
        //private string strconn = "server=FRACO-PC; database=gestion; trusted_connection=true";
        
        private SqlConnection connex;
        private SqlDataReader dr;
        private SqlCommand command;
        private DataTable dt = new DataTable();
        private DataTable dt2 = new DataTable();
        private string requeteBase = "select NumCommande, client.idClient, NomClient, PrenomClient, NumAdressC, RueAdressC, Cp, VilleC, PaysC, TelC, EmailC, JourCommande from commande,client where commande.idclient = client.idClient ";


        private void historiqueCommandes_Load(object sender, EventArgs e)
        {
            //requete-> dataReader -> dataTable -> dataGridView
            connex = new SqlConnection();
            connex.ConnectionString = strconn;
            connex.Open();
            command = new SqlCommand(requeteBase, connex);
            dr = command.ExecuteReader();
            dt.Load(dr);
            dataGridView1.DataSource = dt;
            dataGridView2.DataSource = dt2;

            dataGridView1.Columns[0].HeaderCell.Value = "NumCommande";
            dataGridView1.Columns[1].HeaderCell.Value = "Id Client";
            dataGridView1.Columns[2].HeaderCell.Value = "Nom";
            dataGridView1.Columns[3].HeaderCell.Value = "Prenom";
            dataGridView1.Columns[4].HeaderCell.Value = "Numero";
            dataGridView1.Columns[4].Visible = false;
            dataGridView1.Columns[5].HeaderCell.Value = "Rue";
            dataGridView1.Columns[5].Visible = false;
            dataGridView1.Columns[6].HeaderCell.Value = "Code Postal";
            dataGridView1.Columns[6].Visible = false;
            dataGridView1.Columns[7].HeaderCell.Value = "Ville";

            connex.Close();
        }

        public HistoriqueCommandes()
        {
            InitializeComponent();
        }


        private void label5_Click(object sender, EventArgs e)
        {

        }
        // bouton filter commande
        private void button3_Click(object sender, EventArgs e)
        {
            //complete la requete sql en fonction des filtres
            string sql = requeteBase;
            if (textBox1.Text != ""){ sql += "AND NumCommande = \'" + textBox1.Text + "\'" ;}
            if (textBox4.Text != "") { sql += "AND commande.IdClient = \'" + textBox4.Text + "\'"; }
            if (textBox2.Text != "") { sql += "AND NomClient = \'" + textBox2.Text + "\'"; }
            if (textBox3.Text != "") { sql += "AND PrenomClient = \'" + textBox3.Text + "\'"; }
            if (checkBox1.Checked == true) { sql += "AND  FORMAT ( JourCommande, 'dd/MM/yyyy') = \'" + String.Format("{0:dd/MM/yyyy}", dateTimePicker1.Value) + "\'"; }

            dt.Clear();
            connex.Open();
            command = new SqlCommand(sql, connex);
            dr = command.ExecuteReader();
            dt.Load(dr);
            connex.Close();

 
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //selectionne par ligne non par cellule
            foreach ( DataGridViewCell cellule in dataGridView1.SelectedCells)
            {
                dataGridView1.Rows[cellule.RowIndex].Selected = true;
            }
            // une seule ligne selectionnée
            int unseul = 0;
            foreach (DataGridViewRow ligne in dataGridView1.SelectedRows)
            {
                if (unseul == 0) unseul = 1;
                else ligne.Selected = false;
            }
            DataGridViewRow LiCommande = dataGridView1.SelectedRows[0];
            //recherche du detail de cette commande
            string sqlCommande = "select produit.IdProduit, NomProduit, Quantite from LigneCommande,produit where LigneCommande.IdProduit = Produit.IdProduit AND NumCommande=" + Convert.ToInt32(LiCommande.Cells[0].Value);
            connex.Open();
            command = new SqlCommand(sqlCommande, connex);
            dr = command.ExecuteReader();
            dt2.Clear();
            dt2.Load(dr);
            connex.Close();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            ///////////////////////////////////////////////////////////////////
            //                           NOTE :                              //
            //  Le fonctionnement de cette partie est quasiment le même que  //
            // celui de la partie de la création du ticket dans commande.cs  //
            //          les commentaires sont donc là bas                    //
            ///////////////////////////////////////////////////////////////////


            if (!System.IO.File.Exists("C:/Gestion")) //Vérifie que le dossier gestion existe, si il n'existe pas, il le créé
            {
                System.IO.Directory.CreateDirectory("C:/Gestion"); //Création du fichier gestion
            }
            StreamWriter ticket = new System.IO.StreamWriter("C:/Gestion/" + "ticket.txt"); //Met le fichier texte dans le fichier gestion

            Int16 unSeulClientALaFois = 0;
            int numindex = 0;

            foreach (DataGridViewCell cellules in dataGridView1.SelectedCells) // on selectionne toutes les lignes selectionées partilement
            {
                if (unSeulClientALaFois < 1)
                {
                    numindex = cellules.RowIndex;
                    unSeulClientALaFois++;
                }
                else
                {
                    cellules.Selected = false;
                }
            }
            dataGridView1.Rows[numindex].Selected = true;
            DataGridViewRow LigneCommande = dataGridView1.Rows[numindex];//On créé une variable représentant la ligne selectionné, c'est pas obligatoire mais ça épure un peu le code
            int idclient = Convert.ToInt32(LigneCommande.Cells[1].Value);//Récupération ID client et ID commande
            int idcommande = Convert.ToInt32(LigneCommande.Cells[0].Value);
            string nomClient = "";
            string prenomClient = "";
            string adrClient = "";
            decimal totalcommande = 0;

            //Bloc récupération du nom du client
            if (connex.State == ConnectionState.Closed) connex.Open();
            string sql = "Select NomClient from client where IdClient =" + idclient;
            SqlCommand cmd = new SqlCommand(sql, connex);
            SqlDataReader drNom = cmd.ExecuteReader();
            while (drNom.Read())
            {
                nomClient = Convert.ToString(drNom.GetValue(0));
            }
            drNom.Close();
            connex.Close();

            //Bloc récupération du prénom du client
            if (connex.State == ConnectionState.Closed) connex.Open();
            sql = "Select PrenomClient from client where IdClient =" + idclient;
            cmd = new SqlCommand(sql, connex);
            SqlDataReader drPren = cmd.ExecuteReader();
            while (drPren.Read())
            {
                prenomClient = Convert.ToString(drPren.GetValue(0));
            }
            drPren.Close();
            connex.Close();

            //Bloc récupération de l'adresse du client
            if (connex.State == ConnectionState.Closed) connex.Open();
            sql = "Select NumAdressC, RueAdressC from client where IdClient =" + idclient;
            cmd = new SqlCommand(sql, connex);
            SqlDataReader drAdr = cmd.ExecuteReader();
            while (drAdr.Read())
            {
                adrClient = Convert.ToString(drAdr.GetValue(0)) + " " + Convert.ToString(drAdr.GetValue(1));
            }
            drAdr.Close();
            connex.Close();

            //Ecriture de l'entête : Partie Client
            ticket.Write(prenomClient + " ");
            ticket.Flush();               
            ticket.WriteLine(nomClient);  
            ticket.Flush();               
            ticket.WriteLine(adrClient);  
            ticket.Flush();               
            ticket.WriteLine();
            //Ecriture de l'entête : Partie Entreprise
            ticket.WriteLine("Nom de l'entreprise");
            ticket.WriteLine("17 rue des pissenlits");
            ticket.WriteLine("31270 Villeneuve-Tolosane");
            ticket.WriteLine("06 444 555 666");
            ticket.WriteLine();
            ticket.WriteLine("_______________________________"); 
            ticket.WriteLine("NOM             |QTE|TOTAL     |");
            ticket.WriteLine("_______________________________");
            ticket.Flush();

            if (connex.State == ConnectionState.Closed) connex.Open();
            sql = "Select NomProduit, Quantite, (PrixP * Quantite) as Total From LigneCommande, produit Where LigneCommande.IdProduit=produit.IdProduit and NumCommande =" + idcommande;
            cmd = new SqlCommand(sql, connex);
            SqlDataReader drProd = cmd.ExecuteReader();
            while (drProd.Read()) //Pour chaque résultat, on répetera tout ce qui suis. En gros chaque "passage" représente une "LigneCommande"
            {
                string nomprod = Convert.ToString(drProd.GetValue(0));
                int count = 0;
                foreach (char chartik in nomprod)//Pour chaque lettre dans le nom du produit ...
                {
                    if (count < 16)
                    {
                        ticket.Write(chartik);
                    }
                    count++;
                }
                if (count < 16)
                {               
                    for (int i = count; i < 16; i++)
                    {
                        ticket.Write(" ");
                    }
                } 
                ticket.Write("|"); //Purement graphique, ça represente une colonne dans le tableau

                string quantiteProd = Convert.ToString(drProd.GetValue(1));
                count = 0;
                foreach (char chartik in quantiteProd)
                {
                    if (count < 3)
                    {
                        ticket.Write(chartik);
                    }
                    count++;
                }
                if (count < 3)
                {
                    for (int i = count; i < 3; i++)
                    {
                        ticket.Write(" ");
                    }
                } 
                ticket.Write("|");
                string prixProd = Convert.ToString(drProd.GetValue(2));
                count = 0;
                foreach (char chartik in prixProd)
                {
                    if (count < 10)
                    {
                        ticket.Write(chartik);
                    }
                    count++;
                }
                if (count < 10)
                {
                    for (int i = count; i < 10; i++)
                    {
                        ticket.Write(" ");
                    }
                } 
                ticket.Write("|");
                ticket.WriteLine();
                ticket.Flush();
                totalcommande = totalcommande + Convert.ToDecimal(prixProd); //On récupère le total de la commande
            }
            ticket.Write("_______________________________");
            ticket.WriteLine();
            ticket.Write("Prix total : ");
            ticket.Write(totalcommande);
            ticket.Flush(); //On écrit le total de la commande dans le bas du ticket
            drProd.Close();
            connex.Close();
        }
    }
}
